diff options
Diffstat (limited to 'app/[lng]/evcp/(evcp)/(master-data)/bid-projects/page.tsx')
| -rw-r--r-- | app/[lng]/evcp/(evcp)/(master-data)/bid-projects/page.tsx | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/app/[lng]/evcp/(evcp)/(master-data)/bid-projects/page.tsx b/app/[lng]/evcp/(evcp)/(master-data)/bid-projects/page.tsx new file mode 100644 index 00000000..e98d391b --- /dev/null +++ b/app/[lng]/evcp/(evcp)/(master-data)/bid-projects/page.tsx @@ -0,0 +1,63 @@ +import * as React from "react" +import { type SearchParams } from "@/types/table" + +import { getValidFilters } from "@/lib/data-table" +import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton" +import { getBidProjectLists } from "@/lib/bidding-projects/service" +import { searchParamsBidProjectsCache } from "@/lib/bidding-projects/validation" +import { BidProjectsTable } from "@/lib/bidding-projects/table/projects-table" +import type { Filter } from "@/types/table" + +interface IndexPageProps { + searchParams: Promise<SearchParams> +} + +export default async function IndexPage(props: IndexPageProps) { + const searchParams = await props.searchParams + const search = searchParamsBidProjectsCache.parse(searchParams) + + // URL에서 프로젝트 타입 가져오기 + const projectType = searchParams.type || "all" + + // 기존 필터에 프로젝트 타입 필터 추가 + let filters = search.filters || [] + + // 타입별 필터링 (전체가 아닌 경우만) + if (projectType !== "all") { + const typeFilter: Filter = { + id: "pjtType", + value: projectType, + type: "select", + operator: "eq" + } + + // 기존 pjtType 필터가 있으면 제거하고 새로 추가 + filters = filters.filter(f => f.id !== "pjtType") + filters = [...filters, typeFilter] + } + + const validFilters = getValidFilters(filters) + + const promises = Promise.all([ + getBidProjectLists({ + ...search, + filters: validFilters, + }), + ]) + + return ( + <React.Suspense + fallback={ + <DataTableSkeleton + columnCount={6} + searchableColumnCount={1} + filterableColumnCount={2} + cellWidths={["10rem", "40rem", "12rem", "12rem", "8rem", "8rem"]} + shrinkZero + /> + } + > + <BidProjectsTable promises={promises} /> + </React.Suspense> + ) +} |
